﻿using System;
using System.Collections.Generic;
using System.Web.UI;
using SisEagle.IView.Pedidos;
using SisEagle.Common.Code;
using SisEagle.View.Web.Base;
using System.Data;
using SisEagleVO;

namespace SisEagle.View.Web.Pedidos
{
    public partial class CarrinhoCompra:Base.WebPageBase,ICarrinhoCompraView
    {
        int count = 0;
        #region Singleton
        private SisEagleBO.CarrinhoComprasBO _CarrinhoComprasBusiness;
        private SisEagleBO.CarrinhoComprasBO CarrinhoComprasBusiness
        {
            get
            {
                if(_CarrinhoComprasBusiness == null)
                    _CarrinhoComprasBusiness = new SisEagleBO.CarrinhoComprasBO();

                return _CarrinhoComprasBusiness;
            }
        }

        #endregion

        #region Page-Load/OnInit

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            PaginaAtual = "~/Pedidos/CarrinhoCompra.aspx";
            PaginaLista = "~/Pedidos/CarrinhoCompras.aspx";
            initialize();
        }

        protected void Page_Load(object sender,EventArgs e)
        {
            if(!IsPostBack)
            {
                // Verifica se esta editando um registro
                if(Request.ExisteId())
                {
                    if(!Request.GetIdToInt().Equals(0))
                    {
                        DataSet CarrinhoCompraData = CarrinhoComprasBusiness.FindBy_CodCarrinhoCompras(Request.GetIdToInt());
                        var comprasEntity = CarrinhoCompraData.Tables["CarrinhoCompras"];

                        // Quando a entidade não for encontrada retorna a mensagem de registro não encontrado
                        if(comprasEntity == null)
                        {
                            return;
                        }
                        Acao = ActionData.Update;

                        SetView(comprasEntity);

                    }
                }
                // Criando um novo registro
                else
                {
                    //Novo(this, EventArgs.Empty);
                    NovosDados();

                }
            }

            if (Session["Usuario"] is FuncionarioVO)
            {
                var permissao = (FuncionarioVO)Session["Usuario"];

                lblCodFuncionario.Text = permissao.CodFuncionario.ToString();
                lblNomeFuncionario.Text = permissao.Nome;
            }

            

        }

        private void initialize()
        {
            UcbotoesCadastro.BotaoSalvar.Click += (BotaoSalvar_Click);
            UcbotoesCadastro.BotaoNovo.Click += (BotaoNovo_Click);
            //UcbotoesCadastro.BotaoExcluir.Visible = false;
            //UcbotoesCadastro.BotaoSalvarFechar.Visible = false;
            //UcbotoesCadastro.BotaoExcluir.Visible = false;
            //UcbotoesCadastro.BotaoSalvar.Visible = false;
            UcbotoesCadastro.BotaoExcluir.Click += (BotaoExcluir_Click);
            UcbotoesCadastro.BotaoSalvarFechar.Click += (BotaoSalvarFechar_Click);
            UcbotoesCadastro.BotaoExcluir.Click += (BotaoExcluir_Click);
            UcbotoesCadastro.BotaoCancelar.Click += (s,ev) => Response.Redirect(PaginaLista,false);
        }



        #endregion

        #region Acoes Botoes

        private void BotaoNovo_Click(object sender,ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.PaginaAtual;
            SalvarDados();
            NovosDados();
            limpartela();
        }



        private void BotaoSalvarFechar_Click(object sender,ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.PaginaLista;
            SalvarDados();
            Response.Redirect(PaginaLista,false);
        }

        private void BotaoExcluir_Click(object sender,ImageClickEventArgs e)
        {

            if(count > 0)
                return;
            RedirecionaSalvar = Redirecionamento.PaginaLista;
            Acao = ActionData.Delete;
            SalvarDados();
            NovosDados();
            count++;
        }

        private void BotaoSalvar_Click(object sender,ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.NaoRedirecionar;
            SalvarDados();
            NovosDados();
        }

        #endregion Acoes Botoes

        #region Binding
        public int CodCarrinhoCompras
        {
            get
            {
                if(string.IsNullOrEmpty(txtCodigo.Text) || !(UtilsNumber.IsNumber(txtCodigo.Text)))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(txtCodigo.Text);

            }
            set
            {
                txtCodigo.Text = value.ToString();
            }
        }

       
        public int CodFuncionario
        {
            get
            {
                if (string.IsNullOrEmpty(lblCodFuncionario.Text) || !(UtilsNumber.IsNumber(lblCodFuncionario.Text)))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(lblCodFuncionario.Text);

            }
            set
            {
                lblCodFuncionario.Text = value.ToString();
            }
        }

        public int CodCliente
        {
            get
            {
                if (string.IsNullOrEmpty(UsCliente.ComboClientes.SelectedValue.ToString()) || !(UtilsNumber.IsNumber(UsCliente.ComboClientes.SelectedValue.ToString())))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(UsCliente.ComboClientes.SelectedValue.ToString());

            }
            set
            {
                UsCliente.ComboClientes.SelectedValue = value.ToString();
            }
        }

        
        public List<Mensagem> Mensagens
        {
            set
            {
                UcbotoesCadastro.AddMensagem(value);
                Redireciona(UcbotoesCadastro.HasError);
            }
        }

        private ActionData _Acao;
        [SaveInViewState]
        public ActionData Acao
        {
            get
            {

                return _Acao;

            }
            set
            {
                _Acao = value;
                UcbotoesCadastro.SetAcao(value);

            }
        }
        #endregion

        #region SetView - GetView - Novo

        private void SetView(DataTable ComprasEntity)
        {
            CodCarrinhoCompras = Convert.ToInt32(ComprasEntity.Rows[0]["CodCarrinhoCompras"]);
            CodFuncionario = Convert.ToInt32(ComprasEntity.Rows[0]["CodFuncionario"]);
            CodCliente = Convert.ToInt32(ComprasEntity.Rows[0]["CodCliente"]);
            //CodFormaPagamento = Convert.ToInt32(ComprasEntity.Rows[0]["CodFormaPagamento"]);


        }

        private CarrinhoComprasVO GetView()
        {
            return new CarrinhoComprasVO
            {
                CodCarrinhoCompras = CodCarrinhoCompras,
                codFuncionario = CodFuncionario,
                codCliente = CodCliente,
                //codFormaPagamento = CodFormaPagamento

            };

        }

        private void NovosDados()
        {
            Acao = ActionData.New;
        }
        private void limpartela()
        {
            //UsCliente.ComboClientes.SelectedValue = string.Empty;
            //txtCodFuncionario.Text = string.Empty; Vem de Session
            txtCodigo.Text = string.Empty;            
        }

        #endregion

        #region Crud
        private void SalvarDados()
        {
            int controlador = 0;
            //Instancia da entidade que sera Salva
            SisEagleVO.CarrinhoComprasVO ComprasEntity = new SisEagleVO.CarrinhoComprasVO();

            //Busca os dados da view
            ComprasEntity = GetView();

            switch(Acao)
            {

                case ActionData.New: 

                    controlador = CarrinhoComprasBusiness.Insert(ComprasEntity);
                    PnLink.Visible = true;

                break;
                case ActionData.Update: controlador = CarrinhoComprasBusiness.Update(ComprasEntity);
                break;
                case ActionData.Delete: controlador = CarrinhoComprasBusiness.Delete(ComprasEntity);
                break;
                case ActionData.None:
                default:
                break;

            }
            MonstraMensagem(controlador,Acao);
        }

        #endregion Crud

        #region Mensagem
        public void MonstraMensagem(int controlador,ActionData Acao)
        {
            if((controlador == 1) && (Acao == ActionData.New))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro salvo com sucesso!",MensagemTipo.Aviso);
            }
            if((controlador == 1) && (Acao == ActionData.Update))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro alterado com sucesso!",MensagemTipo.Aviso);
            }
            if((controlador == 1) && (Acao == ActionData.Delete))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro deletado com sucesso!",MensagemTipo.Aviso);
            }
        }

        #endregion

        protected void lkbSelecionarProdutos_Click(object sender, EventArgs e)
        {
            //pega o cod do carrinho que acabou de ser inserido
            int codCarrinhoCompras = CarrinhoComprasBusiness.PegaUltimoCodCarrinho();
            Response.Redirect("Selecionar_Produtos.aspx?codCarrinho=" + codCarrinhoCompras.ToString());
        }

    }
}